package com.rgs.nginx.exption;

import java.util.HashMap;
import java.util.Map;

/**
 * 通信返回码类型
 *
 * @author
 */
public enum ExceptionEnum {
    //管理人自动注册调用crm返回成功code
    CRM_SUCCESS("请求成功", 200),
    MRP_SUCCESS("请求成功", 1001),
    SUCCESS("请求成功", 1008),
    FAILURE("请求失败", 1009),
    INVALID("token失效", 1010),
    PARAM_ERROR("参数{0}错误", 1011),
    PARAMS_ERROR("参数错误", 1011),
    COMMON_ERROR("遇到一个小问题，请联系相关服务人员获取帮助", 1009),

    EXCEL_FAILURE("解析失败", 1012),
    PRODUCT_IS_NULL("产品{0}不存在", 1013),
    CUSTOMER_IS_NULL("客户{0}不存在", 1015),

    QUALIFIED_INVESTOR_CERTIFICATION("请完成合格投资者认证", 1016),

    RISK_LEVEL_MISMATCH("风险等级不匹配", 1017),

    RISK_ASSESSMENT("请完成风险测评", 1018),

    REAL_NAME_LEGALIZE("请完成实名认证", 1019),

    NON_INVESTOR("非该产品的投资者人", 1020),

    REGISTER_PHONE("该手机号已被注册过：", 1021),

    AUTHORIZATION_FAILED("微信授权失败请重新授权!", 1022),

    WEI_XIN_USER_INFO("获取微信用户信息失败!", 1023),

    NONE_OPENID("此微信未在该公司授权登录，请授权!", 1024),

    WEI_XIN_ACCOUNT_ERROR("该微信号绑定用户异常!", 1025),

    COMPANY_NO_REALNAME("公司已清空实名或未实名认证", 1059),

    SPECIAL_MESSAGE("特殊弹框提醒", 1088),

    ORGAN_AUTH_STEP_PAY_AUTH("管理人实名打款金额校验失败", 1099),

    ACCOUNT_EXISTS("新增管理人账号该账号用户中心已存在", 1045),

    ACCOUNT_EXISTS_INCONSISTENT_USERNAME("新增管理人账号该手机号用户中心存在，但是用户名称不一致", 1046),
    
    ABOLISHED_NO_NEW("旧模板被废除且没有新的模板", 1050),
    
    ABOLISHED_HAS_NEW("旧模板被废除且有新的模板", 1051),

    /**
     * fof准入流程 start
     */
    ENTER_FLOW_EXIST("该准入流程已存在", 1500),

    TOKEN("token已失效，请重新登陆", 1014),

    ACCOUNT_FREEZE("账号已被冻结", 1015),

    ONE_LOGIN("初次登录", 1026),
    RESET_PASSWORD_NOT_MATCH("两次输入的密码不正确", 1027),
    REPEATED_EMERGENCE("该手机号已被注册", 1028),
    REPEATED_EMERGENCE_CARDNUMBER("证件号码已经绑定", 1029),
    THE_ACCOUNT_HAS_BEEN_DISABLED("您近期的操作过于频繁，已触发系统安全机制，请联系管理人！", 1030),
    /**
     * fof准入流程 end
     */

    /**
     * 对接老平台
     */
    NO_TEMPLATES_WERE_CREATED("无创建任何模板!", 1031),
    TEMPLATES_ARE_BEING_CREATED("模板均在创建中!", 1032),
    NO_NEW("暂无新增!", 1033),
    ALL_SYNCHRONIZATION("全部同步!", 1034),
    PART_OF_THE_SYNCHRONIZATION("部分同步!", 1035),
    SENSITIVE_WORD_ERROR("短信出现敏感词，请重新输入", 1036),

    /**
     * 登录
     */
    CERT_EXIST("证件号码已存在，请用证件号登录", 1200),

    /**
     * 菜单白名单
     */
    NOT_IN_WHITE_LIST("不在白名单", 1300),



    // ================交易网关:START====================
    NON_COMPANY("管理人不存在", 1500),
    NON_CUSTOMER("投资者未开户", 1501),
    MANY_PRODUCTS("存在多条产品", 1502),
    FLOW_NOT_EXIST("流程不存在", 1503),
    FLOW_FINISHED("流程已结束", 1504),
    NON_PRODUCT("产品不存在", 1505),
    NON_CARD_TYPE("投资者证件类型不存在", 1506),
    NON_PARENT_PRODUCT("母产品不存在", 1507),
    FLOW_DELETED("流程已废除", 1508),
    FLOW_DONE("流程已结束，不可废除此流程", 1509),

    PARA_CHECK_NO_PASS("参数未通过校验", 1400),
    PRODUCT_NO_SOLE("统一备案编号、子母基金标识、财务份额类别下产品不唯一", 1401),
    TRADE_RECORD_NO_EXIST("交易记录为空", 1403),
    LINK_INFO_NO_EXIST("交易记录的文件关联信息为空", 1404),
    CONFIRM_FILE_NO_EXIST("确认文件记录为空", 1405),
    FILE_NO_EXIST("确认书文件为空", 1406),

    CREAT_ACCOUNT("请先开户", 1408),
    SHARE_CATEGORY_IS_NULL("查询子基金时,产品财务份额类别不能为空", 1409),
    MANAGER_NO_SOLE("同一P码下，管理人不唯一", 1410),
    RISK_FILE_NO_EXIST("风测文件为空", 1411),
    NO_NET_VALUE_AUTH("无净值权限", 1412),

    P_CODE_BLANK("P码不能为空", 1413),

    CARD_TYPE_BLANK("证件类型不能为空", 1414),
    CARD_CODE_BLANK("证件号码不能为空", 1415),

    PRODUCT_CODE_BLANK("产品备案编号不能为空", 1416),
    SHARE_CATEGORY_BLANK("子基金的份额分类不能为空", 1417),
    FUND_LEVEL_BLANK("子母基金标识不能为空", 1418),
    TRADE_TYPE_NULL("交易类型不能为空", 1419),
    OPEN_DATE_BLANK("开放日不能为空", 1420),
    DATE_FORMAT_ERROR("日期格式或年月日不正确，正确格式为:yyyy-mm-dd", 1421),
    SHARE_RECORD_NULL("份额记录为空", 1422),


    REAL_NAME_INFO_NULL("实名信息为空", 1423),
    TEMPLATE_SEAL_NULL("模板协议用印参数信息异常", 1424),
    NOT_SEAL_COMPLETE("协议未用完印", 1425),
    SEAL_FAILED("用印失败", 1426),
    LIMIT_ONE_HUNDRED("查询上限为100条",1427),
    NON_RISK_RECORD("无风测记录",1428),
    CAPITALIST_ERROR("资方标识不正确",1429),

    MESSAGE_TYPE_ERROR("消息类型异常",1430),
    ORDER_NO_BLANK("订单编号为空",1431),
    CAPITALIST_BLANK("资方标识为空",1432),
    CAPITALIST_NO_SOLE("资方标识不唯一",1433),
    NO_CHECK("当前流程不处于审核节点",1434),
    PRODUCT_EXIST("产品已上架",1435),
    PRODUCT_NAME_BLANK("产品名称不能为空",1436),
    NO_Element_AUTH("客户没有产品要素权限",1450),

    SOURCE_CODE_BLANK("代销机构代码不能为空",1451),
    SOURCE_CODE_NULL("代销机构不存在",1452),
    FLOW_NOT_NO_SOLE("流程不唯一", 1453),
    NON_SALES_AGENT("不在代销机构名单", 1454),
    NON_SALES_AGENT_AUTH("未授权，请先申请授权", 1455),
    NON_TEMPLATE("协议模板未创建完成", 1456),

    NON_RISK_ASK("风测记录无对应风测问券",1457),
    NON_RISK_ASK_RISK_TIME("风测问券无失效时间",1458),
    NON_RISK_RECORD_RISK_DATE("风测记录无风险测评时间",1459),
    // ================交易网关:END====================

    // ================小程序:START====================
    INVITE_CODE_LAPSE("邀请码已失效，请联系管理人重新获取", 1457),
    CUSTOMER_TYPE_NOT_MATCH("易私慕客户数据与您当前类型不匹配，请联系管理员", 1458),
    NO_REAL_NAME("您暂未实名，请先完成实名", 1459),
    INVITE_CODE_ERROR("邀请码错误，请重试", 1460),
    COMPANY_CODE_NULL("管理人编号不能为空", 1461),
    APP_CUSTOMER_IS_NULL("客户不存在", 1462),
    NO_SIGN("客户没有签约记录", 1463),

    SALES_AGENT_IS_NULL("根据此代销机构编号无法查询到代销机构", 1464),
    // ================小程序:END====================

    // ================实名中台:START================
    CARD_OCCUPIED("证件号【{0}】已被【{1}】注册，请使用该证件号登录或联系管理人修改", 1555),
    // ================实名中台:END================

    NON_IDENTIFY_FLOW("未查询到最新合投流程", 1802),

    /**
     * 管理人已上传双录视频，请退出继续下一步
     */
    MANAGE_HAS_SUBMITTED("管理人已上传双录视频，请退出继续下一步", 1900),
    /**
     * 投资者已上传双录视频，请刷新流程
     */
    INVESTOR_HAS_SUBMITTED("投资者已上传双录视频，请刷新流程", 1901),


    ;

    /**
     * 描述
     */
    private String message;
    /**
     * 返回码
     */
    private Integer code;
    private static Map<Integer, ExceptionEnum> enumMap = new HashMap();

    public static ExceptionEnum getEnum(int code) {
        return enumMap.get(code);
    }

    public static String getMessage(int code) {
        ExceptionEnum en = getEnum(code);
        if (en == null) {
            return getMessage(88888);
        }
        return en.getMessage();
    }

    ExceptionEnum(String message, Integer code) {
        this.message = message;
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    static {
        ExceptionEnum[] enums = values();
        ExceptionEnum[] newEnums = enums;

        for (int i = 0; i < newEnums.length; i++) {
            ExceptionEnum en = newEnums[i];
            enumMap.put(en.getCode(), en);
        }
    }
}
